/*
  Promise规范
    Promise 是一套专门异步场景的规范，他能有效的避免回调地狱的产生，使异步代码更加清晰，简介，统一
      这套规范最早诞生与前端社区，规范名称为Promise A+, 该规范出现后，立即得到了很多开发者的响应

    Promise A+ 规定：
      1. 所有的异步场景，都可以看作使一个异步任务，在JS中应该表现为一个对象，该对象称之为 Promise 对象，
        也叫做任务对象

      2. 每个任务对象，都应该由两个阶段，三个状态
        根据常量，他们之间存在以下逻辑：
          任务总是从未决阶段变到已决状态，无法逆行

          任务总是从挂起状态变到完成或失败状态，无法逆行

          时间不能倒流，链式不可改写，任务一旦完成或失败，状态就固定下来，永远无法改变

      3. 挂起 -> 完成，称之为resolve；挂起 -> 失败；称之为 reject, 任务完成使，可能由一个相关数据，任务失败时，可能有
        一个失败原因

      4. 可以针对任务进行后续处理，针对完成状态的后续处理称之为onFullfilled，针对失败的后续处理称之为onRejected
*/

const pro = new Promise((resolve, reject) => {
  console.log("开始百米短跑");
  const duration = Math.floor(Math.random() * 5000);

  setTimeout(() => {
    if (Math.random() <= 0.5) {
      console.log("短跑结束");
      resolve(duration);
    } else {
      reject("短跑失败");
    }
  }, duration);
});

console.log(pro);
pro.then(
  (data) => {
    console.log(`我跑了${data}`);
  },
  (reason) => {
    console.log(reason);
  }
);
